#include<iostream>

#include<unistd.h>

#include<stdlib.h>

#include <signal.h>

#include <sys/types.h>

#include <sys/wait.h>

using namespace std;

void deal_signal(int a)
{
    cout << "捕捉到一个信号：" << a << endl;
}

int main()
{
    // for(int i = 1; i < 32; ++i)
    // {
    //     signal(i, deal_signal);
    // }

    // while(1)
    // {
    //     cout << "hello world. " << "PID：" << getpid() << endl;
    //     sleep(1);
    // }

    // int ret = fork();
    // if(ret == 0)
    // {
    //     for(int i = 5; i > 0; --i)
    //     {
    //         cout << "我是子进程，倒计时" << i << "秒自杀" << endl;
    //         sleep(1);
    //     }
    //     raise(9);
    // }
    // else if(ret > 0)
    // {
    //     for(int i = 5; i > 0; --i)
    //     {
    //         // cout << "我是父进程，倒计时" << i << "秒杀死子进程" << endl;
    //         cout << "我是父进程" << endl;
    //         sleep(1);
    //     }
    //     // kill(ret, 9);
    //     int st = 0;
    //     wait(&st);
    //     if(WIFEXITED(st))
    //     {
    //         cout << "正常退出，退出状态为：" << WEXITSTATUS(st) << endl;
    //     }
    //     else
    //     {
    //         cout << "异常退出，异常信号为：" << WTERMSIG(st) << endl;
    //     }
    // }
    // else
    // {
    //     perror("fork");
    //     exit(1);
    // }

    for(int i = 1; i < 32; ++i)
    {
        signal(i, deal_signal);
    }

    // int k = 1;
    // while(k++)
    // {
    //     cout << "hello linux. PID：" << getpid() << endl;
    //     sleep(1);
    //     // if(k % 2 == 0) abort();
    // }

    int a = 1;
    char* ptr = nullptr;

    while(a++)
    {
        cout << "hello linux" << endl;
        sleep(1);
        if(a == 5) *ptr = 'a';
    }

    return 0;
}